//
// Created by PC on 2024/4/28.
//
/*
OJ: http://ybt.ssoier.cn:8088/problem_show.php?pid=1336
 通过
 1336：【例3-1】找树根和孩子

时间限制: 1000 ms         内存限制: 65536 KB
提交数:25066    通过数: 13435
【题目描述】

给定一棵树，输出树的根root ，孩子最多的结点max 以及他的孩子。
【输入】
第一行：n
（结点个数≤100），m（边数≤200 ）。

以下m 行：每行两个结点x和y，表示y是x的孩子(x,y≤1000 )。
【输出】
第一行：树根：root ；
第二行：孩子最多的结点max ；
第三行：max 的孩子（按编号由小到输出）。
【输入样例】
8 7
4 1
4 2
1 3
1 5
2 6
2 7
2 8
【输出样例】
4
2
6 7 8
 * */

#include <iostream>

using namespace std;

int main()
{
    int father[1001]={0},child[1001]={0};
    int n,m; // n: 节点数 m: 边数
    int f,c=1; // f:父节点 c:子节点
    cin>>n>>m;
    while(m--)
    {
        cin>>f>>c;
        // 索引为父节点, 值为该节点有几个孩子
        father[f]++;
        // 索引为子节点, 值为该节点的父节点的值
        child[c++]=f;
    }
    int root,max=0,maxi=0;
    for (int i = 0; i <=1000; ++i)
    {
        if (father[i]!=0 && child[i]==0)
            root=i;
        if (father[i]>max)
        {
            max = father[i];
            maxi=i;
        }
    }
    cout<<root<<endl<<maxi<<endl;
    for (int i = 0; i < 1000; ++i)
    {
        if (child[i]== maxi)
        {
            cout<<i<<' ';
        }
    }
    return 0;
}